<?php

namespace action\user;

use \cass\formulaire AS form;

class inscriptionAction extends \cass\Action {

    /**
     * Méthode par défaut
     */
    public function init() {
	// Si connecté, pas d'inscription !
	$this->redirectIf($this->getSession()->isAuthenticated(), '@homepage');
    }

    /**
     * Méthode de connexion 
     */
    public function execute() {
	// Infos de la page
	$this->setTitle('Rejoindre la communauté');

	// Formulaire d'inscription
	$formulaire = new form\Formulaire('Formulaire d\'inscription');
	$formulaire->setButtons('submit', 'S\'inscrire');
	$formulaire->append(new form\Input('Identifiant', '', true, 'L\'identifiant de connexion et le pseudonyme d\'affichage.<br />Alphanumérique, point, apostrophe et espaces tolérés'));
	$formulaire->append(new form\Input('Adresse e-mail', '', true, 'Veillez à sa validité, elle sera utile pour valider l\'inscription'));
	$formulaire->append(new form\Password('Mot de passe', '', true, 'Choisissez un mot de passe personnel et sécurisé'));
	$formulaire->append(new form\Password('Confirmation du mot de passe', '', true, 'Pour éviter les fautes de frappe'));

	// Vérifications
	if ($formulaire->isPosted()) {
	    // Vérification de l'identifiant
	    if (!$formulaire->{'Identifiant'}->isError()) {
		if (strlen($formulaire->getValue('Identifiant')) > 100) {
		    $formulaire->{'Identifiant'}->setError('L\'identifiant ne peut faire plus de 100 caractères');
		} elseif (!preg_match(\cass\Data::regex('identifiant'), $formulaire->getValue('Identifiant'))) {
		    $formulaire->{'Identifiant'}->setError('Doit être alphanumérique, point, apostrophe et espaces tolérés');
		} elseif (($this->doctrine->getRepository('User')->findByName($formulaire->getValue('Identifiant')) != null)) {
		    $formulaire->{'Identifiant'}->setError('L\'identifiant indiqué est déjà utilisé');
		}
	    }

	    // Vérification de l'email
	    if (!$formulaire->{'Adresse e-mail'}->isError()) {
		if (!preg_match(\cass\Data::regex('email'), $formulaire->getValue('Adresse e-mail'))) {
		    $formulaire->{'Adresse e-mail'}->setError('Format attendu : mon.adresse@domaine.ntd');
		} elseif (($this->doctrine->getRepository('User')->findByEmail($formulaire->getValue('Adresse e-mail')) != null)) {
		    $formulaire->{'Adresse e-mail'}->setError('L\'adresse e-mail indiquée est déjà utilisée');
		}
	    }

	    // Vérification des mots de passe
	    if (!$formulaire->{'Mot de passe'}->isError() AND !$formulaire->{'Confirmation du mot de passe'}->isError() AND
		    ( $formulaire->getValue('Mot de passe') != $formulaire->getValue('Confirmation du mot de passe') )) {
		$formulaire->{'Mot de passe'}->setError('Le mot de passe et sa confirmation doivent être identiques');
		$formulaire->{'Confirmation du mot de passe'}->setError('Cette confirmation est différente du mot de passe');
	    }
	}

	// Enregistrements
	if ($formulaire->isPostedWithoutError()) {
	    $user = new \User;
	    $user->setName($formulaire->getValue('Identifiant'));
	    $user->setEmail($formulaire->getValue('Adresse e-mail'));
	    $user->setSalt(encrypt($formulaire->getValue('Identifiant')));
	    $user->setPassword(encrypt($formulaire->getValue('Mot de passe'), $user->getSalt()));
	    $this->doctrine->persist($user);
	    $this->doctrine->flush();
	    $formulaire->setConfirm('Félicitations ' . $user->getName() . ' ! Vous êtes bien inscrit(e) sur Neralind.com. <a href="' . url_for('user', 'connexion') . '">Connectez-vous</a> à votre compte.');
	}

	// Assignements
	$this->formulaire = $formulaire;
    }

}